﻿using System;

namespace Communicate
{
    /// <summary>
    /// 通讯中出现的异常。
    /// </summary>
    [Serializable]
    public class CommunicateException
    {
        /// <summary>
        /// 异常类型。
        /// </summary>
        public ExceptionType ExceptionType
        { get; set; }
        /// <summary>
        /// 详细内容。
        /// </summary>
        public string Detailed
        { get; set; }
        /// <summary>
        /// 异常消息。
        /// </summary>
        public string Message
        { get; set; }
        /// <summary>
        /// 初始化通讯中出现的异常对象。
        /// </summary>
        /// <param name="type">异常类型。</param>
        /// <param name="message">异常消息。</param>
        public CommunicateException(ExceptionType type, string message)
        {
            this.ExceptionType = type;
            Message = message;
        }
        /// <summary>
        /// 初始化通讯中出现的异常对象。
        /// </summary>
        /// <param name="type">异常类型。</param>
        /// <param name="message">异常对象。</param>
        public CommunicateException(ExceptionType type, Exception ex)
        {
            this.ExceptionType = type;
            Message = ex.Message;
            Detailed = ex.ToString();
        }
    }
    /// <summary>
    /// 通讯中出现的异常分类。
    /// </summary>
    [Serializable]
    public enum ExceptionType
    {
        /// <summary>
        /// 登录失败。
        /// </summary>
        Login = 1,
        /// <summary>
        /// 登录超时。
        /// </summary>
        Timeout = 2,
        /// <summary>
        /// 内部异常。
        /// </summary>
        Internal = 3,
        /// <summary>
        /// 外部异常。
        /// </summary>
        External = 4
    }
}
